]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dateMenu: Use non-capitalized forecasts where appropriate
authorFlorian Müllner <fmuellner@gnome.org>
Sat, 25 Feb 2017 17:25:07 +0000 (18:25 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Mon, 21 Aug 2017 13:43:34 +0000 (15:43 +0200)
GWeather now provides us with API to request strings that don't
use sentence capitalization, so we can use it for summaries that
don't start a sentence to make for more natural phrases.

https://bugzilla.gnome.org/show_bug.cgi?id=779873

js/ui/dateMenu.js

index 4f9cf7085b8e5f6b7539843d8606fab14e2555ff..18f2f0e6b6a34f69c2bfb1de73c2c2a2178b48c6 100644 (file)
@@ -233,11 +233,16 @@ var WeatherSection = new Lang.Class({
         this._sync();
     },
 
-    _getSummary: function(info) {
-        let summary = info.get_conditions();
-        if (summary == '-')
-            return info.get_sky();
-        return summary;
+    _getSummary: function(info, capitalize=false) {
+        let options = capitalize ? GWeather.FormatOptions.SENTENCE_CAPITALIZATION
+                                 : GWeather.FormatOptions.NO_CAPITALIZATION;
+
+        let [ok, phenom, qualifier] = info.get_value_conditions();
+        if (ok)
+            return GWeather.conditions_to_string_full(phenom, qualifier, options);
+
+        let [, sky] = info.get_value_sky();
+        return GWeather.sky_to_string_full(sky, options);
     },
 
     _sameSummary: function(info1, info2) {
@@ -255,10 +260,10 @@ var WeatherSection = new Lang.Class({
         let info = this._weatherClient.info;
         let forecasts = info.get_forecast_list();
         if (forecasts.length == 0) // No forecasts, just current conditions
-            return '%s.'.format(this._getSummary(info));
+            return '%s.'.format(this._getSummary(info, true));
 
         let current = info;
-        let summaries = [this._getSummary(info)];
+        let infos = [info];
         for (let i = 0; i < forecasts.length; i++) {
             let [ok, timestamp] = forecasts[i].get_value_update();
             if (!_isToday(new Date(timestamp * 1000)))
@@ -268,12 +273,12 @@ var WeatherSection = new Lang.Class({
                 continue; // Ignore consecutive runs of equal summaries
 
             current = forecasts[i];
-            if (summaries.push(this._getSummary(current)) == 3)
+            if (infos.push(current) == 3)
                 break; // Use a maximum of three summaries
         }
 
         let fmt;
-        switch(summaries.length) {
+        switch(infos.length) {
             /* Translators: %s is a weather condition like "Clear sky"; see
                libgweather for the possible condition strings. If at all
                possible, the sentence should match the grammatical case etc. of
@@ -292,6 +297,10 @@ var WeatherSection = new Lang.Class({
                the inserted conditions. */
             case 3: fmt = _("%s, then %s, followed by %s later."); break;
         }
+        let summaries = infos.map((info, i) => {
+            let capitalize = i == 0 && fmt.startsWith('%s');
+            return this._getSummary(info, capitalize);
+        });
         return String.prototype.format.apply(fmt, summaries);
     },